package main

import(
	"database/sql"
	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql"
	"time"
)

//定义模型
type User struct {
	gorm.Model		// 内嵌gorm.Model
	Name 			string
	Age 			sql.NullInt64	// 零值类型
	Birthday 		*time.Time
	Email 			string  `gorm:"type:varchar(100);unique_index"`
	Role 			string  `gorm:"size:255"`	// 设置字段大小为255
	MemberNumber 	*string `gorm:"unique;not null"`	// 设置会员号(member number)唯一并且不为空
	Num				int 	`gorm:"AUTO_INCREMENT"`	// 设置num为自增类型
	Address         string 	`gorm:"index:addr"`		// 给address字段创建名为addr的索引
	IgnoreMe		int		`gorm:"-"`		// 忽略本字段
}

// 使用AnimalID 作为主键

type Animal struct {
	AnimalID int64 `gorm:"primary_key"`
	Name string
	Age int64
}

// 唯一指定表名,将Animal的表名设置为tansi
func (Animal) TableName() string {
	return "tansi"
}

func main() {
	// 修改默认的表名规则
	gorm.DefaultTableNameHandler = func(db *gorm.DB, defaultTableName string) string {
		return "sms_" + defaultTableName
	}

	db, err := gorm.Open("mysql", "root:root@(127.0.0.1)/db1?charset=utf8mb4&parseTime=True&loc=Local")
	if err != nil {
		panic(err)
	}

	defer db.Close()
	db.SingularTable(true)	// 禁用复数,创建的表名就不带s

	db.AutoMigrate(&User{})
	db.AutoMigrate(&Animal{})

	// 使用User结构体创建名为sitan的表
	db.Table("sitan").CreateTable(&User{})

}